home *** CD-ROM | disk | FTP | other *** search
/ The Ultimate Window Set -…Games & Quality Programs / The Ultimate Window Set - 250 Games & Quality Programs.iso / win / pro187 / setupapi.inc < prev    next >
Text File  |  1993-02-17  |  56KB  |  1,812 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_STANDARD =   16
  17. CONST WF_ENHANCED =   32
  18.  
  19.  
  20. '' DoMsgBox Flags
  21.  
  22. CONST MB_OK          = 0
  23. CONST MB_ICONHAND    = 16
  24. CONST MB_TASKMODAL   = 8192
  25. CONST MB_YESNO         = 4
  26.  
  27. CONST IDOK=1
  28. CONST IDCANCEL=2
  29. CONST IDABORT=3
  30. CONST IDRETRY=4
  31. CONST IDIGNORE=5
  32. CONST IDYES=6
  33. CONST IDNO=7
  34.  
  35.  
  36. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  37. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  38. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  39. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  40. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  41. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  42. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  43.  
  44.  
  45.  
  46.  
  47. '**************************************************************************
  48. '****************************** Setup Constants ***************************
  49. '**************************************************************************
  50.  
  51.  
  52. ''Command Option Flags
  53.  
  54. CONST cmoVital       = 1
  55. CONST cmoCopy        = 2
  56. CONST cmoUndo        = 4
  57. CONST cmoRoot        = 8
  58. CONST cmoDecompress  = 16
  59. CONST cmoTimeStamp   = 32
  60. CONST cmoReadOnly    = 64
  61. CONST cmoBackup      = 128
  62. CONST cmoForce       = 256
  63. CONST cmoRemove      = 512
  64. CONST cmoOverwrite   = 1024
  65. CONST cmoAppend      = 2048
  66. CONST cmoPrepend     = 4096
  67. CONST cmoNone        = 0
  68. CONST cmoAll         = 65535
  69.  
  70.  
  71. ''File Exist Modes
  72.  
  73. CONST femExists     = 0
  74. CONST femRead       = 1
  75. CONST femWrite      = 2
  76. CONST femReadWrite  = 3
  77.  
  78.  
  79. ''Read-Only Return Code
  80.  
  81. CONST ynrcNo         = 0
  82. CONST ynrcYes        = 1
  83. CONST ynrcErr1       = 2
  84. CONST ynrcErr2       = 3
  85. CONST ynrcErr3       = 4
  86. CONST ynrcErr4       = 5
  87. CONST ynrcErr5       = 6
  88. CONST ynrcErr6       = 7
  89. CONST ynrcErr7       = 8
  90. CONST ynrcErr8       = 9
  91. CONST ynrcErr9       = 10
  92.  
  93.  
  94. ''General Return Codes
  95.  
  96. CONST grcOkay       = 0
  97. CONST grcNotOkay    = 1
  98. CONST grcUserQuit   = 48
  99.  
  100.  
  101. ''Ranges
  102.  
  103. ''CONST cbSymValMax = 8192
  104. CONST cbSymValMax = 512
  105.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  106.     '' but we get Out of String Space wattdrvr error if we alloc
  107.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  108.     '' We should look into using dynamic far alloc instead of
  109.     '' STRING$ for large buffers.
  110.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  111.  
  112.  
  113. ''ON ERROR Error Codes
  114. CONST STFERR      = 1024   ''setup system error
  115. CONST STFQUIT     = 1025   ''user quit
  116.  
  117. CONST scmOff      = 0
  118. CONST scmOnIgnore = 1
  119. CONST scmOnFatal  = 2
  120.  
  121.  
  122. '**************************************************************************
  123. '********************************  Setup API's  ***************************
  124. '**************************************************************************
  125.  
  126. '' common
  127.  
  128. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  129. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  130. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  131. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  132. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  133. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  134. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  135. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  136. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  137. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  138. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  139.  
  140.  
  141. ''shell
  142.  
  143. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  144. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  145. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  146. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  147. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  148. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  149. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  150. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  151. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  152. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  153. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  154. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  155. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  156.  
  157.  
  158. ''shell
  159.  
  160. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  161. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  162. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  163.  
  164.  
  165.  
  166. ''install
  167.  
  168. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  169. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  170. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  171. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  172. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  173. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  174. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  175. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  176. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  177. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  178. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  179. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  180. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  181. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  182. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  183. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  184. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  185. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  186. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  187. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  188. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  189. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  190. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  191. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  192. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  193. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  194. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  195. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  196. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  197. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  198. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  199. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  200. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  201. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  202. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  203. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  204. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  205.  
  206. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  207.  
  208.  
  209.  
  210. '*************************************************************************
  211. '****************  Setup Basic Wrapper Declarations  *********************
  212. '*************************************************************************
  213.  
  214.  
  215. ''shell
  216.  
  217. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  218. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  219. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  220. DECLARE SUB UIPop (n%)
  221. DECLARE SUB UIPopAll
  222. DECLARE SUB SetTitle (sz$)
  223. DECLARE SUB ReadInfFile (szFile$)
  224. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  225. DECLARE SUB RemoveSymbol (szSym$)
  226. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  227. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  228. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  229. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  230. DECLARE SUB AddListItem(szSymbol$, szItem$)
  231. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  232.  
  233. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  234. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  235.  
  236. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  237. DECLARE SUB RestoreCursor (hPrev%)
  238.  
  239. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  240. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  241.  
  242. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  243. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  244. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  245. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  246.  
  247. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  248. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  249. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  250. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  251.  
  252.  
  253. ''install
  254.  
  255.  
  256. DECLARE SUB CreateDir (szDir$, cmo%)
  257. DECLARE SUB RemoveDir (szDir$, cmo%)
  258. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  259. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  260. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  261. DECLARE SUB CopyFilesInCopyList
  262. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  263. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  264. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  265. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  266. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  267. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  268. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  269. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  270. DECLARE SUB DumpCopyList (szFile$)
  271. DECLARE SUB ClearCopyList
  272. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  273. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  274. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  275. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  276. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  277. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  278. DECLARE SUB InitInstall
  279. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  280. DECLARE SUB AddBlankToBillboardList (lTicks&)
  281. DECLARE SUB ClearBillboardList
  282. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  283. DECLARE SUB CloseLogFile
  284. DECLARE SUB WriteToLogFile (szStr$)
  285. DECLARE SUB SetCopyGaugePosition (x%, y%)
  286. DECLARE SUB SetRestartDir(szDir$)
  287. DECLARE FUNCTION RestartListEmpty AS INTEGER
  288. DECLARE FUNCTION ExitExecRestart AS INTEGER
  289. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  290. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  291. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  292. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  293. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  294.  
  295.  
  296. '' Error Handling
  297.  
  298. '$ifdef DEBUG
  299.  
  300. '' Setup API Errors
  301. CONST saeFail   = 0
  302. CONST saeInit   = 1
  303. CONST saeNYI    = 3
  304. CONST saeArg    = 4    ''must be max sae value
  305.  
  306. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  307. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  308.  
  309. '' chk arg
  310. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  311. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  312. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  313. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  314.  
  315. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  316. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  317.  
  318. '$endif ''DEBUG
  319.  
  320.  
  321.  
  322. '' Windows system detect
  323.  
  324. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  325. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  326. DECLARE FUNCTION GetWindowsMode AS INTEGER
  327. DECLARE FUNCTION GetWindowsDir  AS STRING
  328. DECLARE FUNCTION GetWindowsSysDir AS STRING
  329. DECLARE FUNCTION IsWindowsShared AS INTEGER
  330. DECLARE FUNCTION GetScreenWidth AS INTEGER
  331. DECLARE FUNCTION GetScreenHeight AS INTEGER
  332.  
  333.  
  334. '*************************************************************************
  335. '*****************  Setup Basic Wrapper Definitions  *********************
  336. '*************************************************************************
  337. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  338.     fFrameInit = 0
  339.     fInstallInit = 0
  340.  
  341.     IF hSetup > 0 THEN
  342. '$ifdef DEBUG
  343.         StfApiErr saeInit, "InitSetup", szCmdLine$
  344. '$endif ''DEBUG
  345.     END IF
  346.  
  347.     i% = InitFrame(szCmdLine$)
  348.     fFrameInit = 1
  349.  
  350.     InitInstall
  351.     fInstallInit = 1
  352.  
  353.     InitSetup = i%
  354. END FUNCTION
  355.  
  356.  
  357.  
  358. '**************************************************************************
  359. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  360.     IF hSetup > 0 THEN
  361. '$ifdef DEBUG
  362.         StfApiErr saeInit, "InitFrame", szCmdLine$
  363. '$endif ''DEBUG
  364.     ELSE
  365.         i% = InitializeFrame(szCmdLine$)
  366.         IF i% = -1 THEN
  367.             END   '' NOT an error - Usage (/?) or Command line copy operation
  368.         ELSEIF i% = 0 THEN
  369. '$ifdef DEBUG
  370.             StfApiErr saeFail, "InitFrame", szCmdLine$
  371. '$endif ''DEBUG
  372.             END
  373.         ELSE
  374.             InitFrame = i%
  375.         END IF
  376.     END IF
  377. END FUNCTION
  378.  
  379.  
  380. '**************************************************************************
  381. SUB SetBitmap(szDll$, Bitmap%) STATIC
  382.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  383. '$ifdef DEBUG
  384.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  385. '$endif ''DEBUG
  386.         ERROR STFERR
  387.     END IF
  388. END SUB
  389.  
  390.  
  391. '**************************************************************************
  392. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  393.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  394. '$ifdef DEBUG
  395.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  396. '$endif ''DEBUG
  397.         ERROR STFERR
  398.     END IF
  399. END SUB
  400.  
  401.  
  402. '*************************************************************************
  403. SUB SetTitle(sz$) STATIC
  404.     SetWindowText HwndFrame(), sz$
  405. END SUB
  406.  
  407.  
  408. '*************************************************************************
  409. SUB ReadInfFile (szFile$) STATIC
  410. '$ifdef DEBUG
  411.     if FValidFATPath(szFile$) = 0 then
  412.         BadArgErr 1, "ReadInfFile", szFile$
  413.     end if
  414.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  415.         StfApiErr saeFail, "ReadInfFile", szFile$
  416. '$else  ''!DEBUG
  417.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  418. '$endif ''!DEBUG
  419.         ERROR STFERR
  420.     END IF
  421. END SUB
  422.  
  423.  
  424. '*************************************************************************
  425. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  426. '$ifdef DEBUG
  427.     if szDll$ = "" then
  428.         n% = 1
  429.     elseif szDlgProc$ = "" then
  430.         n% = 3
  431.     else
  432.         n% = 0
  433.     end if
  434.     if n% > 0 then
  435.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  436.     end if
  437. '$endif ''DEBUG
  438.  
  439.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  440. '$ifdef DEBUG
  441.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  442. '$endif ''DEBUG
  443.         ERROR STFERR
  444.     ELSE
  445.         UIStartDlg = GetSymbolValue("DLGEVENT")
  446.     END IF
  447. END FUNCTION
  448.  
  449.  
  450. '*************************************************************************
  451. SUB UIPop (n%) STATIC
  452.     IF FKillNDialogs(n%) = 0 THEN
  453. '$ifdef DEBUG
  454.         StfApiErr saeFail, "UIPop", STR$(n%)
  455. '$endif ''DEBUG
  456.         ERROR STFERR
  457.     END IF
  458. END SUB
  459.  
  460.  
  461. '*************************************************************************
  462. SUB UIPopAll STATIC
  463.     IF FKillNDialogs(65535) = 0 THEN
  464. '$ifdef DEBUG
  465.         StfApiErr saeFail, "UIPopAll", ""
  466. '$endif ''DEBUG
  467.         ERROR STFERR
  468.     END IF
  469. END SUB
  470.  
  471.  
  472. '*************************************************************************
  473. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  474. '$ifdef DEBUG
  475.     if szSymbol$ = "" then
  476.         BadArgErr 1, "GetSymbolValue", szSymbol$
  477.     end if
  478. '$endif ''DEBUG
  479.     szValue$ = string$(cbSymValMax,32)
  480.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  481.     GetSymbolValue = szValue$
  482.     IF Length% >= cbSymValMax THEN
  483.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  484.         ERROR STFERR
  485.     END IF
  486.     IF szSymbol$ = "" THEN
  487.         ERROR STFERR
  488.     END IF
  489.     szValue$ = ""
  490. END FUNCTION
  491.  
  492.  
  493. '*************************************************************************
  494. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  495. '$ifdef DEBUG
  496.     if szSymbol$ = "" then
  497.         BadArgErr 1, "GetListLength", szSymbol$
  498.     end if
  499. '$endif ''DEBUG
  500.     GetListLength = UsGetListLength(szSymbol$)
  501.     IF szSymbol$ = "" THEN
  502.         ERROR STFERR
  503.     END IF
  504. END FUNCTION
  505.  
  506.  
  507. '*************************************************************************
  508. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  509. '$ifdef DEBUG
  510.     if szListSymbol$ = "" then
  511.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  512.     end if
  513.  
  514.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  515.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  516.     end if
  517. '$endif ''DEBUG
  518.  
  519.     szListItem$ = string$(cbSymValMax,32)
  520.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  521.     GetListItem = szListItem$
  522.     IF Length% >= cbSymValMax THEN
  523.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  524.         ERROR STFERR
  525.     END IF
  526.     IF szListSymbol$ = "" THEN
  527.         ERROR STFERR
  528.     END IF
  529.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  530.         ERROR STFERR
  531.     end if
  532.     szListItem$ = ""
  533. END FUNCTION
  534.  
  535.  
  536. '*************************************************************************
  537. SUB AddListItem(szSymbol$, szItem$) STATIC
  538. '$ifdef DEBUG
  539.     if szSymbol$ = "" then
  540.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  541.     end if
  542. '$endif ''DEBUG
  543.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  544. '$ifdef DEBUG
  545.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  546. '$endif ''DEBUG
  547.         ERROR STFERR
  548.     END IF
  549. END SUB
  550.  
  551.  
  552. '*************************************************************************
  553. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  554. '$ifdef DEBUG
  555.     if szSymbol$ = "" then
  556.         nArg% = 1
  557.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  558.         nArg% = 2
  559.     else
  560.         nArg% = 0
  561.     end if
  562.     if nArg% > 0 then
  563.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  564.     end if
  565. '$endif ''DEBUG
  566.  
  567.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  568. '$ifdef DEBUG
  569.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  570. '$endif ''DEBUG
  571.         ERROR STFERR
  572.     END IF
  573. END SUB
  574.  
  575.  
  576. '**************************************************************************
  577. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  578. '$ifdef DEBUG
  579.     if szSymbol$ = "" then
  580.         n% = 1
  581.     elseif FValidInfSect(szSect$) = 0 then
  582.         n% = 2
  583.     else
  584.         n% = 0
  585.     end if
  586.     if n% > 0 then
  587.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  588.     end if
  589. '$endif ''DEBUG
  590.  
  591.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  592. '$ifdef DEBUG
  593.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  594. '$endif ''DEBUG
  595.         ERROR STFERR
  596.     END IF
  597. END SUB
  598.  
  599.  
  600. '*************************************************************************
  601. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  602. '$ifdef DEBUG
  603.     if szSymbol$ = "" then
  604.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  605.     end if
  606. '$endif ''DEBUG
  607.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  608. '$ifdef DEBUG
  609.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  610. '$endif ''DEBUG
  611.         ERROR STFERR
  612.     END IF
  613. END SUB
  614.  
  615.  
  616. '*************************************************************************
  617. SUB RemoveSymbol(szSym$) STATIC
  618. '$ifdef DEBUG
  619.     if szSym$ = "" then
  620.         BadArgErr 1, "RemoveSymbol", szSym$
  621.     end if
  622. '$endif ''DEBUG
  623.     IF FRemoveSymbol(szSym$) = 0 THEN
  624. '$ifdef DEBUG
  625.         StfApiErr saeFail, "RemoveSymbol", szSym$
  626. '$endif ''DEBUG
  627.         ERROR STFERR
  628.     END IF
  629. END SUB
  630.  
  631.  
  632. '*************************************************************************
  633. FUNCTION ShowWaitCursor STATIC AS INTEGER
  634.     ShowWaitCursor = HShowWaitCursor
  635. END FUNCTION
  636.  
  637.  
  638. '*************************************************************************
  639. SUB RestoreCursor (hPrev%) STATIC
  640.     i% = FRestoreCursor(hPrev%)
  641.     IF i% = 0 THEN
  642. '$ifdef DEBUG
  643.         StfApiErr saeFail, "RestoreCursor", ""
  644. '$endif ''DEBUG
  645.         ERROR STFERR
  646.     END IF
  647. END SUB
  648.  
  649.  
  650. '*************************************************************************
  651. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  652.     SetBeepingMode = FSetBeepingMode(mode%)
  653. END FUNCTION
  654.  
  655.  
  656. '*************************************************************************
  657. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  658.     SetSilentMode = FSetSilent(mode%)
  659. END FUNCTION
  660.  
  661.  
  662. '*************************************************************************
  663. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  664. '$ifdef DEBUG
  665.     if FValidInfSect(szSect$) = 0 then
  666.         n% = 1
  667.     elseif szKey$ = "" then
  668.         n% = 2
  669.     else
  670.         n% = 0
  671.     end if
  672.     if n% > 0 then
  673.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  674.     end if
  675. '$endif ''DEBUG
  676.  
  677.     szBuf$ = string$(128, 32)
  678.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  679.     IF Length% >= 128 THEN
  680.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  681.         ERROR STFERR
  682.     END IF
  683.  
  684.     IF Length% = -1 THEN
  685. '$ifdef DEBUG
  686.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  687. '$endif ''DEBUG
  688.         ERROR STFERR
  689.     END IF
  690.  
  691.     GetSectionKeyDate = szBuf$
  692.     szBuf$ = ""
  693. END FUNCTION
  694.  
  695.  
  696. '*************************************************************************
  697. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  698. '$ifdef DEBUG
  699.     if FValidInfSect(szSect$) = 0 then
  700.         n% = 1
  701.     elseif szKey$ = "" then
  702.         n% = 2
  703.     else
  704.         n% = 0
  705.     end if
  706.     if n% > 0 then
  707.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  708.     end if
  709. '$endif ''DEBUG
  710.  
  711.     szBuf$ = string$(128, 32)
  712.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  713.     IF Length% >= 128 THEN
  714.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  715.         ERROR STFERR
  716.     END IF
  717.  
  718.     IF Length% = -1 THEN
  719. '$ifdef DEBUG
  720.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  721. '$endif ''DEBUG
  722.         ERROR STFERR
  723.     END IF
  724.  
  725.     GetSectionKeyFilename = szBuf$
  726.     szBuf$ = ""
  727. END FUNCTION
  728.  
  729.  
  730. '*************************************************************************
  731. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  732. '$ifdef DEBUG
  733.     if FValidInfSect(szSect$) = 0 then
  734.         n% = 1
  735.     elseif szKey$ = "" then
  736.         n% = 2
  737.     else
  738.         n% = 0
  739.     end if
  740.     if n% > 0 then
  741.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  742.     end if
  743. '$endif ''DEBUG
  744.  
  745.     szBuf$ = string$(128, 32)
  746.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  747.     IF Length% >= 128 THEN
  748.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  749.         ERROR STFERR
  750.     END IF
  751.  
  752.     IF Length% = -1 THEN
  753. '$ifdef DEBUG
  754.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  755. '$endif ''DEBUG
  756.         ERROR STFERR
  757.     END IF
  758.  
  759.     GetSectionKeySize = VAL(szBuf$)
  760.     szBuf$ = ""
  761. END FUNCTION
  762.  
  763.  
  764. '*************************************************************************
  765. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  766. '$ifdef DEBUG
  767.     if FValidInfSect(szSect$) = 0 then
  768.         n% = 1
  769.     elseif szKey$ = "" then
  770.         n% = 2
  771.     else
  772.         n% = 0
  773.     end if
  774.     if n% > 0 then
  775.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  776.     end if
  777. '$endif ''DEBUG
  778.  
  779.     szBuf$ = string$(128, 32)
  780.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  781.     IF Length% >= 128 THEN
  782.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  783.         ERROR STFERR
  784.     END IF
  785.  
  786.     IF Length% = -1 THEN
  787. '$ifdef DEBUG
  788.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  789. '$endif ''DEBUG
  790.         ERROR STFERR
  791.     END IF
  792.  
  793.     GetSectionKeyVersion = szBuf$
  794.     szBuf$ = ""
  795. END FUNCTION
  796.  
  797.  
  798. '*************************************************************************
  799. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  800. '$ifdef DEBUG
  801.     if szSym$ = "" then
  802.         n% = 1
  803.     elseif FValidInfSect(szSect$) = 0 then
  804.         n% = 2
  805.     else
  806.         n% = 0
  807.     end if
  808.     if n% > 0 then
  809.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  810.     end if
  811. '$endif ''DEBUG
  812.  
  813.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  814. '$ifdef DEBUG
  815.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  816. '$endif ''DEBUG
  817.         ERROR STFERR
  818.     END IF
  819. END SUB
  820.  
  821.  
  822. '*************************************************************************
  823. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  824. '$ifdef DEBUG
  825.     if szSym$ = "" then
  826.         n% = 1
  827.     elseif FValidInfSect(szSect$) = 0 then
  828.         n% = 2
  829.     else
  830.         n% = 0
  831.     end if
  832.     if n% > 0 then
  833.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  834.     end if
  835. '$endif ''DEBUG
  836.  
  837.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  838. '$ifdef DEBUG
  839.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  840. '$endif ''DEBUG
  841.         ERROR STFERR
  842.     END IF
  843. END SUB
  844.  
  845.  
  846. '*************************************************************************
  847. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  848. '$ifdef DEBUG
  849.     if szSym$ = "" then
  850.         n% = 1
  851.     elseif FValidInfSect(szSect$) = 0 then
  852.         n% = 2
  853.     else
  854.         n% = 0
  855.     end if
  856.     if n% > 0 then
  857.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  858.     end if
  859. '$endif ''DEBUG
  860.  
  861.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  862. '$ifdef DEBUG
  863.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  864. '$endif ''DEBUG
  865.         ERROR STFERR
  866.     END IF
  867. END SUB
  868.  
  869.  
  870. '*************************************************************************
  871. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  872. '$ifdef DEBUG
  873.     if szSym$ = "" then
  874.         n% = 1
  875.     elseif FValidInfSect(szSect$) = 0 then
  876.         n% = 2
  877.     else
  878.         n% = 0
  879.     end if
  880.     if n% > 0 then
  881.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  882.     end if
  883. '$endif ''DEBUG
  884.  
  885.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  886. '$ifdef DEBUG
  887.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  888. '$endif ''DEBUG
  889.         ERROR STFERR
  890.     END IF
  891. END SUB
  892.  
  893.  
  894. '*************************************************************************
  895. SUB InitInstall STATIC
  896.     IF hSetup > 0 THEN
  897. '$ifdef DEBUG
  898.         StfApiErr saeInit, "InitInstall", ""
  899. '$endif ''DEBUG
  900.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  901. '$ifdef DEBUG
  902.         StfApiErr saeFail, "InitInstall", ""
  903. '$endif ''DEBUG
  904.         END
  905.     END IF
  906. END SUB
  907.  
  908.  
  909. '*************************************************************************
  910. SUB CreateDir (szDir$, cmo%) STATIC
  911. '$ifdef DEBUG
  912.     if FValidFATDir(szDir$) = 0 then
  913.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  914.     end if
  915. '$endif ''DEBUG
  916.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  917. '$ifdef DEBUG
  918.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  919. '$endif ''DEBUG
  920.         ERROR STFERR
  921.     END IF
  922. END SUB
  923.  
  924.  
  925. '*************************************************************************
  926. SUB RemoveDir (szDir$, cmo%) STATIC
  927. '$ifdef DEBUG
  928.     if FValidFATDir(szDir$) = 0 then
  929.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  930.     end if
  931. '$endif ''DEBUG
  932.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  933. '$ifdef DEBUG
  934.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  935. '$endif ''DEBUG
  936.         ERROR STFERR
  937.     END IF
  938. END SUB
  939.  
  940.  
  941.  
  942. '*************************************************************************
  943. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  944. '$ifdef DEBUG
  945.     if FValidIniFile(szFile$) = 0 then
  946.         n% = 1
  947.     elseif FValidInfSect(szSect$) = 0 then
  948.         n% = 2
  949.     else
  950.         n% = 0
  951.     end if
  952.     if n% > 0 then
  953.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  954.     end if
  955. '$endif ''DEBUG
  956.  
  957.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  958. '$ifdef DEBUG
  959.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  960. '$endif ''DEBUG
  961.         ERROR STFERR
  962.     END IF
  963. END SUB
  964.  
  965.  
  966. '*************************************************************************
  967. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  968. '$ifdef DEBUG
  969.     if FValidIniFile(szFile$) = 0 then
  970.         n% = 1
  971.     elseif FValidInfSect(szSect$) = 0 then
  972.         n% = 2
  973.     else
  974.         n% = 0
  975.     end if
  976.     if n% > 0 then
  977.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  978.     end if
  979. '$endif ''DEBUG
  980.  
  981.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  982. '$ifdef DEBUG
  983.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  984. '$endif ''DEBUG
  985.         ERROR STFERR
  986.     END IF
  987. END SUB
  988.  
  989.  
  990. '*************************************************************************
  991. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  992. '$ifdef DEBUG
  993.     if FValidIniFile(szFile$) = 0 then
  994.         n% = 1
  995.     elseif FValidInfSect(szSect$) = 0 then
  996.         n% = 2
  997.     elseif szKey$ = "" then
  998.         n% = 3
  999.     else
  1000.         n% = 0
  1001.     end if
  1002.     if n% > 0 then
  1003.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1004.     end if
  1005. '$endif ''DEBUG
  1006.  
  1007.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  1008. '$ifdef DEBUG
  1009.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1010. '$endif ''DEBUG
  1011.         ERROR STFERR
  1012.     END IF
  1013. END SUB
  1014.  
  1015.  
  1016. '*************************************************************************
  1017. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  1018. '$ifdef DEBUG
  1019.     if FValidFATPath(szFile$) = 0 then
  1020.         n% = 1
  1021.     elseif FValidInfSect(szSect$) = 0 then
  1022.         n% = 2
  1023.     elseif szKey$ = "" then
  1024.         n% = 3
  1025.     else
  1026.         n% = 0
  1027.     end if
  1028.     if n% > 0 then
  1029.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1030.     end if
  1031. '$endif ''DEBUG
  1032.  
  1033.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1034. '$ifdef DEBUG
  1035.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1036. '$endif ''DEBUG
  1037.         ERROR STFERR
  1038.     END IF
  1039. END SUB
  1040.  
  1041.  
  1042. '*************************************************************************
  1043. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  1044. '$ifdef DEBUG
  1045.     if szGroup$ = "" or len(szGroup$) > 24 then
  1046.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1047.     end if
  1048. '$endif ''DEBUG
  1049.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  1050. '$ifdef DEBUG
  1051.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  1052. '$endif ''DEBUG
  1053.         ERROR STFERR
  1054.     END IF
  1055. END SUB
  1056.  
  1057.  
  1058. '*************************************************************************
  1059. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  1060. '$ifdef DEBUG
  1061.     if szGroup$ = "" or len(szGroup$) > 24 then
  1062.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1063.     end if
  1064. '$endif ''DEBUG
  1065.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  1066. '$ifdef DEBUG
  1067.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1068. '$endif ''DEBUG
  1069.         ERROR STFERR
  1070.     END IF
  1071. END SUB
  1072.  
  1073.  
  1074. '*************************************************************************
  1075. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  1076. '$ifdef DEBUG
  1077.     if FValidInfSect(szSect$) = 0 then
  1078.         n% = 1
  1079.     elseif szKey$ = "" then
  1080.         n% = 2
  1081.     elseif FValidFATDir(szDst$) = 0 then
  1082.         n% = 3
  1083.     else
  1084.         n% = 0
  1085.     end if
  1086.     if n% > 0 then
  1087.         BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1088.     end if
  1089. '$endif ''DEBUG
  1090.  
  1091.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  1092. '$ifdef DEBUG
  1093.         StfApiErr saeFail, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1094. '$endif ''DEBUG
  1095.         ERROR STFERR
  1096.     END IF
  1097. END SUB
  1098.  
  1099.  
  1100. '*************************************************************************
  1101. SUB DumpCopyList (szFile$) STATIC
  1102. '$ifdef DEBUG
  1103.     if szFile$ = "" then
  1104.         BadArgErr 1, "DumpCopyList", szFile$
  1105.     end if
  1106. '$endif ''DEBUG
  1107.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  1108. '$ifdef DEBUG
  1109.         StfApiErr saeFail, "DumpCopyList", szFile$
  1110. '$endif ''DEBUG
  1111.         ERROR STFERR
  1112.     END IF
  1113. END SUB
  1114.  
  1115.  
  1116. '*************************************************************************
  1117. SUB ClearCopyList STATIC
  1118.     ResetCopyList
  1119. END SUB
  1120.  
  1121.  
  1122. '*************************************************************************
  1123. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1124.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1125.     IF lNeed& < 0 THEN
  1126. '$ifdef DEBUG
  1127.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1128. '$endif ''DEBUG
  1129.         ERROR STFERR
  1130.     END IF
  1131.     GetCopyListCost = lNeed&
  1132. END FUNCTION
  1133.  
  1134.  
  1135. '*************************************************************************
  1136. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  1137.     szItemNew$ = szItem$
  1138.     IF szOther$ <> "" THEN
  1139.         szItemNew$ = szItem$ + "," + szOther$
  1140.     END IF
  1141. '$ifdef DEBUG
  1142.     if szGroup$ = "" or len(szGroup$) > 24 then
  1143.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1144.     end if
  1145. '$endif ''DEBUG
  1146.  
  1147.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1148. '$ifdef DEBUG
  1149.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1150. '$endif ''DEBUG
  1151.         ERROR STFERR
  1152.     END IF
  1153.     szItemNew$ = ""
  1154. END SUB
  1155.  
  1156.  
  1157. '*************************************************************************
  1158. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  1159. '$ifdef DEBUG
  1160.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1161.         n% = 1
  1162.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1163.         n% = 1
  1164.     elseif szProgHelp$ = "" then
  1165.         n% = 2
  1166.     else
  1167.         n% = 0
  1168.     end if
  1169.     if n% > 0 then
  1170.         BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1171.     end if
  1172. '$endif ''DEBUG
  1173.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  1174. '$ifdef DEBUG
  1175.         StfApiErr saeFail, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1176. '$endif ''DEBUG
  1177.         ERROR STFERR
  1178.     END IF
  1179. END SUB
  1180.  
  1181.  
  1182. '*************************************************************************
  1183. SUB CopyFilesInCopyList STATIC
  1184.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1185.  
  1186.     IF grc% = grcUserQuit THEN
  1187.         ERROR STFQUIT
  1188.     ELSEIF grc% > 0 THEN
  1189. '$ifdef DEBUG
  1190.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1191. '$endif ''DEBUG
  1192.         ERROR STFERR
  1193.     END IF
  1194. END SUB
  1195.  
  1196.  
  1197. '*************************************************************************
  1198. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1199. '$ifdef DEBUG
  1200.     if FValidFATPath(szFullPathSrc$) = 0 then
  1201.         n% = 1
  1202.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1203.         n% = 2
  1204.     else
  1205.         n% = 0
  1206.     end if
  1207.     if n% > 0 then
  1208.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1209.     end if
  1210. '$endif ''DEBUG
  1211.  
  1212.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1213. '$ifdef DEBUG
  1214.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1215. '$endif ''DEBUG
  1216.         ERROR STFERR
  1217.     END IF
  1218. END SUB
  1219.  
  1220.  
  1221.  
  1222. '*************************************************************************
  1223. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1224. '$ifdef DEBUG
  1225.     if FValidFATPath(szFullPathSrc$) = 0 then
  1226.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1227.     end if
  1228. '$endif ''DEBUG
  1229.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1230. '$ifdef DEBUG
  1231.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1232. '$endif ''DEBUG
  1233.         ERROR STFERR
  1234.     END IF
  1235. END SUB
  1236.  
  1237.  
  1238. '*************************************************************************
  1239. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1240. '$ifdef DEBUG
  1241.     if FValidFATPath(szFullPath$) = 0 then
  1242.         n% = 1
  1243.     elseif szBackup$ = "" then
  1244.         n% = 2
  1245.     else
  1246.         n% = 0
  1247.     end if
  1248.     if n% > 0 then
  1249.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1250.     end if
  1251. '$endif ''DEBUG
  1252.  
  1253.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1254. '$ifdef DEBUG
  1255.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1256. '$endif ''DEBUG
  1257.         ERROR STFERR
  1258.     END IF
  1259. END SUB
  1260.  
  1261.  
  1262. '*************************************************************************
  1263. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1264. '$ifdef DEBUG
  1265.     if FValidFATPath(szFullPath$) = 0 then
  1266.         n% = 1
  1267.     elseif szBackup$ = "" then
  1268.         n% = 2
  1269.     else
  1270.         n% = 0
  1271.     end if
  1272.     if n% > 0 then
  1273.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1274.     end if
  1275. '$endif ''DEBUG
  1276.  
  1277.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1278. '$ifdef DEBUG
  1279.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1280. '$endif ''DEBUG
  1281.         ERROR STFERR
  1282.     END IF
  1283. END SUB
  1284.  
  1285.  
  1286. '*************************************************************************
  1287. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1288. '$ifdef DEBUG
  1289.     if FValidInfSect(szSect$) = 0 then
  1290.         n% = 1
  1291.     elseif FValidFATDir(szSrc$) = 0 then
  1292.         n% = 2
  1293.     elseif FValidFATDir(szDest$) = 0 then
  1294.         n% = 3
  1295.     else
  1296.         n% = 0
  1297.     end if
  1298.     if n% > 0 then
  1299.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1300.     end if
  1301. '$endif ''DEBUG
  1302.  
  1303.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1304. '$ifdef DEBUG
  1305.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1306. '$endif ''DEBUG
  1307.         ERROR STFERR
  1308.     END IF
  1309. END SUB
  1310.  
  1311.  
  1312. '*************************************************************************
  1313. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1314. '$ifdef DEBUG
  1315.     if FValidInfSect(szSect$) = 0 then
  1316.         n% = 1
  1317.     elseif szKey$ = "" then
  1318.         n% = 2
  1319.     elseif FValidFATDir(szSrc$) = 0 then
  1320.         n% = 3
  1321.     elseif FValidFATDir(szDest$) = 0 then
  1322.         n% = 4
  1323.     else
  1324.         n% = 0
  1325.     end if
  1326.     if n% > 0 then
  1327.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1328.     end if
  1329. '$endif ''DEBUG
  1330.  
  1331.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1332. '$ifdef DEBUG
  1333.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1334. '$endif ''DEBUG
  1335.         ERROR STFERR
  1336.     END IF
  1337. END SUB
  1338.  
  1339.  
  1340. '*************************************************************************
  1341. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1342. '$ifdef DEBUG
  1343.     if FValidInfSect(szSect$) = 0 then
  1344.         n% = 1
  1345.     elseif szKey$ = "" then
  1346.         n% = 2
  1347.     elseif FValidFATDir(szSrc$) = 0 then
  1348.         n% = 3
  1349.     elseif FValidFATPath(szDest$) = 0 then
  1350.         n% = 4
  1351.     else
  1352.         n% = 0
  1353.     end if
  1354.     if n% > 0 then
  1355.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1356.     end if
  1357. '$endif ''DEBUG
  1358.  
  1359.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1360. '$ifdef DEBUG
  1361.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1362. '$endif ''DEBUG
  1363.         ERROR STFERR
  1364.     END IF
  1365. END SUB
  1366.  
  1367.  
  1368. '*************************************************************************
  1369. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1370. '$ifdef DEBUG
  1371.     if szDll$ = "" then
  1372.         n% = 1
  1373.     elseif idDlg% = 0 then
  1374.         n% = 2
  1375.     elseif szProc$ = "" then
  1376.         n% = 3
  1377.     elseif lTicks& <= 0 then
  1378.         n% = 4
  1379.     else
  1380.         n% = 0
  1381.     end if
  1382.     if n% > 0 then
  1383.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1384.     end if
  1385. '$endif ''DEBUG
  1386.  
  1387.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1388. '$ifdef DEBUG
  1389.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1390. '$endif ''DEBUG
  1391.         ERROR STFERR
  1392.     END IF
  1393. END SUB
  1394.  
  1395.  
  1396. '*************************************************************************
  1397. SUB AddBlankToBillboardList (lTicks&) STATIC
  1398. '$ifdef DEBUG
  1399.     if lTicks& <= 0 then
  1400.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1401.     end if
  1402. '$endif ''DEBUG
  1403.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1404. '$ifdef DEBUG
  1405.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1406. '$endif ''DEBUG
  1407.         ERROR STFERR
  1408.     END IF
  1409. END SUB
  1410.  
  1411.  
  1412. '*************************************************************************
  1413. SUB ClearBillboardList STATIC
  1414.     IF FClearBillboardList = 0 THEN
  1415. '$ifdef DEBUG
  1416.         StfApiErr saeFail, "ClearBillboardList", ""
  1417. '$endif ''DEBUG
  1418.         ERROR STFERR
  1419.     END IF
  1420. END SUB
  1421.  
  1422.  
  1423. '*************************************************************************
  1424. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1425. '$ifdef DEBUG
  1426.     if FValidFATPath(szFile$) = 0 then
  1427.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1428.     end if
  1429. '$endif ''DEBUG
  1430.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1431. '$ifdef DEBUG
  1432.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1433. '$endif ''DEBUG
  1434.         ERROR STFERR
  1435.     END IF
  1436. END SUB
  1437.  
  1438.  
  1439. '*************************************************************************
  1440. SUB CloseLogFile STATIC
  1441.     IF FCloseLogFile() = 0 THEN
  1442. '$ifdef DEBUG
  1443.         StfApiErr saeFail, "CloseLogFile", ""
  1444. '$endif ''DEBUG
  1445.         ERROR STFERR
  1446.     END IF
  1447. END SUB
  1448.  
  1449.  
  1450. '*************************************************************************
  1451. SUB WriteToLogFile (szStr$) STATIC
  1452.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1453. '$ifdef DEBUG
  1454.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1455. '$endif ''DEBUG
  1456.         ERROR STFERR
  1457.     END IF
  1458. END SUB
  1459.  
  1460.  
  1461. ''' -1 in either parameter will mean 'center in frame client area'
  1462. '*************************************************************************
  1463. SUB SetCopyGaugePosition (x%, y%) STATIC
  1464.     ProSetPos x%, y%
  1465. END SUB
  1466.  
  1467.  
  1468. '*************************************************************************
  1469. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  1470.     szBuf$ = STRING$(512, 32)
  1471.  
  1472.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  1473.     IF wRet% = 0 THEN
  1474.         FindFileUsingFileOpen = szBuf$
  1475.     ELSEIF wRet% = 1 THEN
  1476.         FindFileUsingFileOpen = ""
  1477.     ELSE
  1478. '$ifdef DEBUG
  1479.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  1480. '$endif ''DEBUG
  1481.         ERROR STFERR
  1482.     END IF
  1483.  
  1484.     szBuf$ = ""
  1485. END FUNCTION
  1486.  
  1487.  
  1488. '*************************************************************************
  1489. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1490.     IsDirWritable = FIsDirWritable(szDir$)
  1491. END FUNCTION
  1492.  
  1493.  
  1494. '*************************************************************************
  1495. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1496. '$ifdef DEBUG
  1497.     if FValidFATDir(szFile$) = 0 then
  1498.         BadArgErr 1, "IsFileWritable", szFile$
  1499.     end if
  1500. '$endif ''DEBUG
  1501.     IsFileWritable = FIsFileWritable(szFile$)
  1502. END FUNCTION
  1503.  
  1504.  
  1505. '*************************************************************************
  1506. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1507.     IF iField% < 1 THEN
  1508. '$ifdef DEBUG
  1509.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1510. '$endif ''DEBUG
  1511.         ERROR STFERR
  1512.     END IF
  1513.     szStart$ = szLine$
  1514.     IF iField% <> 1 THEN
  1515.         FOR i% = 2 TO iField% STEP 1
  1516.             iNew% = INSTR(szStart$, ",")
  1517.             IF iNew% = 0 THEN
  1518.                 GetNthFieldFromIniString = ""
  1519.                 GOTO _GNFFIS_END
  1520.             END IF
  1521.             szStart$ = MID$(szStart$, (iNew% + 1))
  1522.         NEXT
  1523.     END IF
  1524.  
  1525.     iNew% = INSTR(szStart$, ",")
  1526.     IF iNew% <> 0 THEN
  1527.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1528.     END IF
  1529.  
  1530.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1531.  
  1532. _GNFFIS_END:
  1533.  
  1534. END FUNCTION
  1535.  
  1536.  
  1537. '*************************************************************************
  1538. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1539.     GetWindowsMajorVersion = GetVersion() MOD 256
  1540. END FUNCTION
  1541.  
  1542.  
  1543. '*************************************************************************
  1544. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1545.     GetWindowsMinorVersion = GetVersion() / 256
  1546. END FUNCTION
  1547.  
  1548.  
  1549. '*************************************************************************
  1550. FUNCTION GetWindowsMode STATIC AS INTEGER
  1551.     GetWindowsMode = 0
  1552.     longTmp& = GetWinFlags()
  1553.     IF longTmp& AND WF_STANDARD THEN
  1554.         GetWindowsMode = 1
  1555.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1556.         GetWindowsMode = 2
  1557.     END IF
  1558. END FUNCTION
  1559.  
  1560.  
  1561. '*************************************************************************
  1562. FUNCTION GetWindowsDir STATIC AS STRING
  1563.     szBuf$ = string$(256, 32)
  1564.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1565.  
  1566.     IF cbBuf% = 0 THEN
  1567.         GetWindowsDir = ""
  1568. '$ifdef DEBUG
  1569.         StfApiErr saeFail, "GetWindowsDir", ""
  1570. '$endif ''DEBUG
  1571.         ERROR STFERR
  1572.     ELSE
  1573.         IF cbBuf% > 255 THEN
  1574.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1575.             ERROR STFERR
  1576.         END IF
  1577.         szBuf$ = RTRIM$(szBuf$)
  1578.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1579.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1580.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1581.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1582.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1583.         END IF
  1584.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1585.             szBuf$ = szBuf$ + "\"
  1586.         END IF
  1587.         GetWindowsDir = szBuf$
  1588.     END IF
  1589.  
  1590.     szBuf$ = ""
  1591. END FUNCTION
  1592.  
  1593.  
  1594. '*************************************************************************
  1595. FUNCTION GetWindowsSysDir STATIC AS STRING
  1596.     szBuf$ = string$(256, 32)
  1597.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1598.  
  1599.     IF cbBuf% = 0 THEN
  1600. '$ifdef DEBUG
  1601.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1602. '$endif ''DEBUG
  1603.         ERROR STFERR
  1604.     ELSE
  1605.         IF cbBuf% > 255 THEN
  1606.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1607.             ERROR STFERR
  1608.         END IF
  1609.         szBuf$ = RTRIM$(szBuf$)
  1610.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1611.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1612.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1613.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1614.         END IF
  1615.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1616.             szBuf$ = szBuf$ + "\"
  1617.         END IF
  1618.         GetWindowsSysDir = szBuf$
  1619.     END IF
  1620.  
  1621.     szBuf$ = ""
  1622. END FUNCTION
  1623.  
  1624.  
  1625. '*************************************************************************
  1626. FUNCTION IsWindowsShared STATIC AS INTEGER
  1627.     szWin$ = UCASE$(GetWindowsDir())
  1628.     szSys$ = UCASE$(GetWindowsSysDir())
  1629.  
  1630.     IF len(szWin$) = 0 THEN
  1631. '$ifdef DEBUG
  1632.         StfApiErr saeFail, "IsWindowsShared", ""
  1633. '$endif ''DEBUG
  1634.         ERROR STFERR
  1635.     END IF
  1636.  
  1637.     IF len(szSys$) <= len(szWin$) THEN
  1638.         IsWindowsShared = 1
  1639.     ELSE
  1640.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1641.         IF szWin$ = szSys$ THEN
  1642.             IsWindowsShared = 0
  1643.         ELSE
  1644.             IsWindowsShared = 1
  1645.         END IF
  1646.     END IF
  1647. END FUNCTION
  1648.  
  1649.  
  1650. '*************************************************************************
  1651. FUNCTION GetScreenWidth STATIC AS INTEGER
  1652.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1653. END FUNCTION
  1654.  
  1655.  
  1656. '*************************************************************************
  1657. FUNCTION GetScreenHeight STATIC AS INTEGER
  1658.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1659. END FUNCTION
  1660.  
  1661.  
  1662. '*************************************************************************
  1663. SUB SetRestartDir (szDir$) STATIC
  1664. '$ifdef DEBUG
  1665.     if FValidFATDir(szDir$) = 0 then
  1666.         BadArgErr 1, "SetRestartDir", szDir$
  1667.     end if
  1668. '$endif ''DEBUG
  1669.     IF FSetRestartDir(szDir$) = 0 THEN
  1670. '$ifdef DEBUG
  1671.         StfApiErr saeFail, "SetRestartDir", szDir$
  1672. '$endif ''DEBUG
  1673.         ERROR STFERR
  1674.     END IF
  1675. END SUB
  1676.  
  1677.  
  1678. '*************************************************************************
  1679. FUNCTION RestartListEmpty STATIC AS INTEGER
  1680.     IF FRestartListEmpty() = 0 THEN
  1681.         RestartListEmpty = 0
  1682.     ELSE
  1683.         RestartListEmpty = 1
  1684.     END IF
  1685. END FUNCTION
  1686.  
  1687.  
  1688. '*************************************************************************
  1689. FUNCTION ExitExecRestart STATIC AS INTEGER
  1690.     ExitExecRestart = FExitExecRestart
  1691. END FUNCTION
  1692.  
  1693.  
  1694. '*************************************************************************
  1695. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1696.  
  1697. '$ifdef DEBUG
  1698.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1699.         n% = 1
  1700.     elseif FValidFATPath(szDst$) = 0 then
  1701.         n% = 2
  1702.     elseif FValidFATDir(szDir$) = 0 then
  1703.         n% = 3
  1704.     else
  1705.         n% = 0
  1706.     end if
  1707.     if n% > 0 then
  1708.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1709.     end if
  1710. '$endif ''DEBUG
  1711.  
  1712.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1713. '$ifdef DEBUG
  1714.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1715. '$endif ''DEBUG
  1716.         ERROR STFERR
  1717.     END IF
  1718. END SUB
  1719.  
  1720.  
  1721.  
  1722. '**************************************************************************
  1723. '***************************  Error Handlers  *****************************
  1724. '**************************************************************************
  1725.  
  1726.  
  1727. '$ifdef DEBUG
  1728. '**************************************************************************
  1729. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1730.     select case nMsg%
  1731.         case saeFail
  1732.             lpText$ = "Failed"
  1733.         case saeInit
  1734.             lpText$ = "Already Initialized"
  1735.         case saeNYI
  1736.             lpText$ = "NYI"
  1737.         case else
  1738.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1739.     end select
  1740.  
  1741.     lpText$ = lpText$ + ": "+ szApi$
  1742.     if szArgs$ <> "" then
  1743.         lpText$ = lpText + " (" + szArgs$ + ")"
  1744.     end if
  1745.     lpCaption$ = "MS-Setup Toolkit API Error"
  1746.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1747.     print lpText$
  1748.     lpText$ = ""
  1749.     lpCaption$ = ""
  1750. END SUB
  1751.  
  1752. '**************************************************************************
  1753. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1754.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1755.     ERROR STFERR
  1756. END SUB
  1757.  
  1758.  
  1759. '** REVIEW: Move this function into common lib (we'll need it there too)
  1760. '**************************************************************************
  1761. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1762.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1763.         FValidInfSect = 0
  1764.     else
  1765.         FValidInfSect = 1
  1766.     end if
  1767. END FUNCTION
  1768.  
  1769.  
  1770. '** REVIEW: Move this function into common lib (we'll need it there too)
  1771. '**************************************************************************
  1772. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1773.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1774.         FValidIniFile = 0
  1775.     else
  1776.         FValidIniFile = 1
  1777.     end if
  1778. END FUNCTION
  1779.  
  1780. '**************************************************************************
  1781. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1782.  
  1783.     if szDrive$ = "" then
  1784.         FValidDrive = 0
  1785.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1786.         FValidDrive = 1
  1787.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1788.         FValidDrive = 0
  1789.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1790.         FValidDrive = 0
  1791.     elseif LEN(szDrive$) = 1 then
  1792.         FValidDrive = 1
  1793.     elseif INSTR(2,szDrive$,":\") = 2 then
  1794.         FValidDrive = 1
  1795.     elseif INSTR(1,szDrive$,":") = 2 then
  1796.         FValidDrive = 1
  1797.     else
  1798.         FValidDrive = 0
  1799.     end if
  1800. END FUNCTION
  1801.  
  1802. '$endif ''DEBUG
  1803.  
  1804.  
  1805. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1806.  
  1807. End Trap
  1808.  
  1809. hSetup = InitSetup(COMMAND$)
  1810.  
  1811. ON ERROR GOTO QUIT
  1812.